package utils

import (
	"fmt"
	"os"
	"path/filepath"
	"runtime"
)

// GetGoroutineID 获得协程ID
func GetGoroutineID() int {
	var buf [64]byte
	runtime.Stack(buf[:], false)
	var id int
	fmt.Sscanf(string(buf[:]), "goroutine %d", &id)
	return id
}
func GoroutineID() (id uint64) {
	var buf [30]byte
	runtime.Stack(buf[:], false)
	for i := 10; buf[i] != ' '; i++ {
		id = id*10 + uint64(buf[i]&15)
	}
	return id
}

func LoadYamlFile(path string) ([]byte, error) {
	// path路径是否合法
	if path == "" {
		return nil, fmt.Errorf("路径不正确")
	}
	// 判断路径是否是相对路径，相对路径是 "."开头的，如果是相对路径，把当前程序目录的路径拼接起来
	if filepath.Dir(path) == "." {
		currentDir, _ := os.Getwd()
		path = currentDir + "/" + path
	}
	// 看看文件是否存在
	if _, err := os.Stat(path); os.IsNotExist(err) {
		return nil, fmt.Errorf("文件不存在")
	}
	if _, err := os.Stat(path); os.IsPermission(err) {
		return nil, fmt.Errorf("文件权限不足")
	}
	// 读取文件内容
	data, err := os.ReadFile(path)
	return data, err
}
func CheckFile(path string) (bool, error) {
	// path路径是否合法
	if path == "" {
		return false, fmt.Errorf("路径不正确")
	}
	// 判断路径是否是相对路径，相对路径是 "."开头的，如果是相对路径，把当前程序目录的路径拼接起来
	if filepath.Dir(path) == "." {
		currentDir, _ := os.Getwd()
		path = currentDir + "/" + path
	}
	// 看看文件是否存在
	if _, err := os.Stat(path); os.IsNotExist(err) {
		return false, fmt.Errorf("文件不存在")
	}
	if _, err := os.Stat(path); os.IsPermission(err) {
		return false, fmt.Errorf("文件权限不足")
	}
	return true, nil
}
